# agent/llm/llm_client.py

# 从 langchain_openai 导入 ChatOpenAI
from langchain_openai import ChatOpenAI
from typing import Optional # 导入 Optional 以便清晰地表示可选参数

def initialize_llm(config: dict) -> ChatOpenAI:
    """
    根据配置初始化 ChatOpenAI LLM 实例。
    兼容所有 OpenAI API 格式的服务，包括本地 Ollama/LocalAI (通过 base_url)。
    
    config 期望的结构示例:
    {
        "model_config": {
            "model_name": "gpt-3.5-turbo",  # 或本地模型的名称，如 "llama2"
            "api_key": "YOUR_OPENAI_KEY",   # 或本地服务的虚拟密钥，如 "ollama" 或 "Not needed"
            "base_url": "https://api.openai.com/v1", # (可选) 默认为 OpenAI
            # 对于 Ollama/LocalAI: "base_url": "http://localhost:11434/v1"
            "system_prompt": "You are a helpful assistant.",
            "max_tokens": 256
        }
    }
    """
    llm_config = config.get("model_config", {})
    
    # 获取参数
    model_name: str = llm_config.get("model_name")
    api_key: Optional[str] = llm_config.get("api_key")
    max_tokens: Optional[int] = llm_config.get("max_tokens")
    # *** 关键：获取 base_url 以支持本地服务，如 Ollama ***
    base_url: Optional[str] = llm_config.get("base_url")
    
    # 获取系统提示
    system_prompt: Optional[str] = llm_config.get("system_prompt")
    
    # 构造 ChatOpenAI 实例
    # base_url 参数可以覆盖默认的 OpenAI API 地址，使其指向本地的 Ollama/LocalAI
    # 对于本地服务，api_key 可以是任何非空字符串，如 "ollama"
    llm = ChatOpenAI(
        model=model_name, 
        api_key=api_key, 
        max_tokens=max_tokens,
        # 传入 base_url 以兼容本地服务
        base_url=base_url 
    )
    
    return llm